home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-11 / rlib.zip / RL_KEYIN.PRG < prev    next >
Text File  |  1993-01-04  |  3KB  |  51 lines

  1. * Function..: KEYINPUT
  2. * Author....: Richard Low
  3. * Syntax....: KEYINPUT( exp<N>, exp<L>, exp<L> )
  4. * Returns...: The character string inputted.
  5. * Parameters: p_numchars = maximum number of characters allowed in input
  6. *             p_upcase   = force entry in upper case (.T.|.F.)
  7. *             p_echochar = echo characters on screen (.T.|.F.)
  8. * Notes....: Function to get character input while echoing dots on screen.
  9.  
  10. FUNCTION KEYINPUT
  11. PARAMETERS p_numchars, p_upcase, p_echochar
  12. PRIVATE f_str, f_i, f_key, f_c, f_mrow, f_mcol                       && hide all memvars
  13.  
  14. *-- first check and verify all parameters
  15.  
  16. p_numchars = IF( TYPE('p_numchars') = 'N', p_numchars,  80 )         && if #1 is numeric, use as width, else default to 80 characters
  17. p_upcase   = IF( TYPE('p_upcase')   = 'L', p_upcase,   .F. )         && if #2 is logical, use as upper case flag, otherwise false
  18. p_echochar = IF( TYPE('p_echochar') = 'L', p_echochar, .T. )         && if #3 is logical, use as the echo flag, otherwise true
  19.  
  20. f_str = ''                                                           && set up null string to hold entry
  21. f_i   = 1
  22.  
  23. DO WHILE f_i <= p_numchars                                           && start the loop to get each char
  24.    f_key = INKEY(0)                                                  && wait & get ASCII value of keypress
  25.  
  26.    DO CASE
  27.       CASE f_key > 31 .AND. f_key < 127                              && if in printable character range
  28.          f_c = IF( p_upcase, UPPER(CHR(f_key)), CHR(f_key) )         && convert to upper case if flag set
  29.          f_str = f_str + f_c                                         && add new character onto string
  30.          f_i = f_i + 1                                               && increment counter
  31.          ?? IF( p_echochar, f_c, '.' )                               && echo character on screen or only a dot
  32.  
  33.       CASE f_key = 8 .AND. f_i > 1                                   && back space over an entry
  34.          f_mrow = IF( COL() = 0, ROW()-1, ROW() )                    && if at column zero, back up to previous row
  35.          f_mcol = IF( COL() = 0, 79, COL()-1 )                       && go to end of previous line, or just back one space
  36.          @ f_mrow, f_mcol SAY ' '                                    && erase previous dot or character
  37.          @ f_mrow, f_mcol SAY ''                                     && move the cursor back
  38.          f_i = f_i - 1                                               && decrement  f_i
  39.          f_str = IF( f_i=1, '', SUBSTR(f_str,1,f_i-1) )              && if BS to beginning, make string null, else shorten it
  40.  
  41.       CASE f_key = 13                                                && Enter key pressed
  42.          EXIT
  43.  
  44.       CASE f_key = 27                                                && Escape key pressed
  45.          f_str = ''                                                  && return null string
  46.          EXIT
  47.  
  48.    ENDCASE
  49. ENDDO
  50. RETURN (f_str)
  51.